// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/ozone/common/display_snapshot_proxy.h"

#include <stddef.h>

#include "ui/ozone/common/display_mode_proxy.h"
#include "ui/ozone/common/gpu/ozone_gpu_message_params.h"

namespace ui {

namespace {

    bool SameModes(const DisplayMode_Params& lhs, const DisplayMode_Params& rhs)
    {
        return lhs.size == rhs.size && lhs.is_interlaced == rhs.is_interlaced && lhs.refresh_rate == rhs.refresh_rate;
    }

} // namespace

DisplaySnapshotProxy::DisplaySnapshotProxy(const DisplaySnapshot_Params& params)
    : DisplaySnapshot(params.display_id,
        params.origin,
        params.physical_size,
        params.type,
        params.is_aspect_preserving_scaling,
        params.has_overscan,
        params.display_name,
        params.sys_path,
        std::vector<const DisplayMode*>(),
        params.edid,
        NULL,
        NULL)
    , string_representation_(params.string_representation)
{
    for (size_t i = 0; i < params.modes.size(); ++i) {
        modes_.push_back(new DisplayModeProxy(params.modes[i]));

        if (params.has_current_mode && SameModes(params.modes[i], params.current_mode))
            current_mode_ = modes_.back();

        if (params.has_native_mode && SameModes(params.modes[i], params.native_mode))
            native_mode_ = modes_.back();
    }

    product_id_ = params.product_id;
}

DisplaySnapshotProxy::~DisplaySnapshotProxy()
{
}

std::string DisplaySnapshotProxy::ToString() const
{
    return string_representation_;
}

} // namespace ui
